// noinspection JSUnresolvedReference
/**
* Field Google Map
*/
/* global jQuery, document, redux_change, redux, google */
(function ( $ ) {
'use strict';
redux.field_objects = redux.field_objects || {};
redux.field_objects.google_maps = redux.field_objects.google_maps || {};
/* LIBRARY INIT */
redux.field_objects.google_maps.init = function ( selector ) {
if ( ! selector ) {
selector = $( document ).find( '.redux-group-tab:visible' ).find( '.redux-container-google_maps:visible' );
}
$( selector ).each(
function ( i ) {
let delayRender;
const el = $( this );
let parent = el;
if ( ! el.hasClass( 'redux-field-container' ) ) {
parent = el.parents( '.redux-field-container:first' );
}
if ( parent.is( ':hidden' ) ) {
return;
}
if ( parent.hasClass( 'redux-field-init' ) ) {
parent.removeClass( 'redux-field-init' );
} else {
return;
}
// Check for delay render, which is useful for calling a map
// render after JavaScript load.
delayRender = Boolean( el.find( '.redux_framework_google_maps' ).data( 'delay-render' ) );
// API Key button.
redux.field_objects.google_maps.clickHandler( el );
// Init our maps.
redux.field_objects.google_maps.initMap( el, i, delayRender );
}
);
};
/* INIT MAP FUNCTION */
redux.field_objects.google_maps.initMap = async function ( el, idx, delayRender ) {
let delayed;
let scrollWheel;
let streetView;
let mapType;
let address;
let defLat;
let defLong;
let defaultZoom;
let mapOptions;
let geocoder;
let g_autoComplete;
let g_LatLng;
let g_map;
let noLatLng = false;
// Pull the map class.
const mapClass = el.find( '.redux_framework_google_maps' );
const containerID = mapClass.attr( 'id' );
const autocomplete = containerID + '_autocomplete';
const canvas = containerID + '_map_canvas';
const canvasId = $( '#' + canvas );
const latitude = containerID + '_latitude';
const longitude = containerID + '_longitude';
// Add map index to data attr.
// Why, say we want to use delay_render,
// and want to init the map later on.
// You'd need the index number in the
// event of multiple map instances.
// This allows one to retrieve it
// later.
$( mapClass ).attr( 'data-idx', idx );
if ( true === delayRender ) {
return;
}
// Map has been rendered, no need to process again.
if ( $( '#' + containerID ).hasClass( 'rendered' ) ) {
return;
}
// If a map is set to delay render and has been initiated
// from another scrip, add the 'render' class so rendering
// does not occur.
// It messes things up.
delayed = Boolean( mapClass.data( 'delay-render' ) );
if ( true === delayed ) {
mapClass.addClass( 'rendered' );
}
// Create the autocomplete object, restricting the search
// to geographical location types.
g_autoComplete = await google.maps.importLibrary( 'places' );
g_autoComplete = new google.maps.places.Autocomplete( document.getElementById( autocomplete ), {types: ['geocode']} );
// Data bindings.
scrollWheel = Boolean( mapClass.data( 'scroll-wheel' ) );
streetView = Boolean( mapClass.data( 'street-view' ) );
mapType = Boolean( mapClass.data( 'map-type' ) );
address = mapClass.data( 'address' );
address = decodeURIComponent( address );
address = address.trim();
// Set default Lat/lng.
defLat = canvasId.data( 'default-lat' );
defLong = canvasId.data( 'default-long' );
defaultZoom = canvasId.data( 'default-zoom' );
// Eval whether to set maps based on lat/lng or address.
if ( '' !== address ) {
if ( '' === defLat || '' === defLong ) {
noLatLng = true;
}
} else {
noLatLng = false;
}
// Can't have empty values, or the map API will complain.
// Set default for the middle of the United States.
defLat = defLat ? defLat : 39.11676722061108;
defLong = defLong ? defLong : -100.47761000000003;
if ( noLatLng ) {
// If displaying a map based on an address.
geocoder = new google.maps.Geocoder();
// Set up Geocode and pass address.
geocoder.geocode(
{'address': address},
function ( results, status ) {
let latitude;
let longitude;
// Function results.
if ( status === google.maps.GeocoderStatus.OK ) {
// A good address was passed.
g_LatLng = results[0].geometry.location;
// Set map options.
mapOptions = {
center: g_LatLng,
zoom: defaultZoom,
streetViewControl: streetView,
mapTypeControl: mapType,
scrollwheel: scrollWheel,
mapTypeControlOptions: {
style: google.maps.MapTypeControlStyle.HORIZONTAL_BAR,
position: google.maps.ControlPosition.LEFT_BOTTOM
},
mapId: 'REDUX_GOOGLE_MAPS',
};
// Create map.
g_map = new google.maps.Map( document.getElementById( canvas ), mapOptions );
// Get and set lat/long data.
latitude = el.find( '#' + containerID + '_latitude' );
latitude.val( results[0].geometry.location.lat() );
longitude = el.find( '#' + containerID + '_longitude' );
longitude.val( results[0].geometry.location.lng() );
redux.field_objects.google_maps.renderControls( el, latitude, longitude, g_autoComplete, g_map, autocomplete, mapClass, g_LatLng, containerID );
} else {
// No data found, alert the user.
alert( 'Geocode was not successful for the following reason: ' + status );
}
}
);
} else {
// If displaying map based on an lat/lng.
g_LatLng = new google.maps.LatLng( defLat, defLong );
// Set map options.
mapOptions = {
center: g_LatLng,
zoom: defaultZoom, // Start off far unless an item is selected, set by php.
streetViewControl: streetView,
mapTypeControl: mapType,
scrollwheel: scrollWheel,
mapTypeControlOptions: {
style: google.maps.MapTypeControlStyle.HORIZONTAL_BAR,
position: google.maps.ControlPosition.LEFT_BOTTOM
},
mapId: 'REDUX_GOOGLE_MAPS',
};
// Create the map.
g_map = new google.maps.Map( document.getElementById( canvas ), mapOptions );
redux.field_objects.google_maps.renderControls( el, latitude, longitude, g_autoComplete, g_map, autocomplete, mapClass, g_LatLng, containerID );
}
};
redux.field_objects.google_maps.renderControls = function ( el, latitude, longitude, g_autoComplete, g_map, autocomplete, mapClass, g_LatLng, containerID ) {
let markerTooltip;
let infoWindow;
let g_marker;
let geoAlert = mapClass.data( 'geo-alert' );
// Get HTML.
const input = document.getElementById( autocomplete );
// Set objects into the map.
g_map.controls[google.maps.ControlPosition.TOP_LEFT].push( input );
// Bind objects to the map.
g_autoComplete = new google.maps.places.Autocomplete( input );
g_autoComplete.bindTo( 'bounds', g_map );
// Get the marker tooltip data.
markerTooltip = mapClass.data( 'marker-tooltip' );
markerTooltip = decodeURIComponent( markerTooltip );
// Create infoWindow.
infoWindow = new google.maps.InfoWindow();
// Create marker.
g_marker = new google.maps.Marker(
{
position: g_LatLng,
map: g_map,
anchorPoint: new google.maps.Point( 0, - 29 ),
draggable: true,
title: markerTooltip,
animation: google.maps.Animation.DROP
}
);
geoAlert = decodeURIComponent( geoAlert );
// Place change.
google.maps.event.addListener(
g_autoComplete,
'place_changed',
function () {
let place;
let address;
let markerTooltip;
infoWindow.close();
// Get place data.
place = g_autoComplete.getPlace();
// Display alert if something went wrong.
if ( ! place.geometry ) {
window.alert( geoAlert );
return;
}
console.log( place.geometry.viewport );
// If the place has a geometry, then present it on a map.
if ( place.geometry.viewport ) {
g_map.fitBounds( place.geometry.viewport );
} else {
g_map.setCenter( place.geometry.location );
g_map.setZoom( 17 ); // Why 17? Because it looks good.
}
markerTooltip = mapClass.data( 'marker-tooltip' );
markerTooltip = decodeURIComponent( markerTooltip );
// Set the marker icon.
g_marker = new google.maps.Marker(
{
position: g_LatLng,
map: g_map,
anchorPoint: new google.maps.Point( 0, - 29 ),
title: markerTooltip,
clickable: true,
draggable: true,
animation: google.maps.Animation.DROP
}
);
// Set marker position and display.
g_marker.setPosition( place.geometry.location );
g_marker.setVisible( true );
// Form array of address components.
address = '';
if ( place.address_components ) {
address = [( place.address_components[0] && place.address_components[0].short_name || '' ),
( place.address_components[1] && place.address_components[1].short_name || '' ),
( place.address_components[2] && place.address_components[2].short_name || '' )].join( ' ' );
}
// Set the default marker info window with address data.
infoWindow.setContent( '
' + place.name + ' ' + address );
infoWindow.open( g_map, g_marker );
// Run Geolocation.
redux.field_objects.google_maps.geoLocate( g_autoComplete );
// Fill in address inputs.
redux.field_objects.google_maps.fillInAddress( el, latitude, longitude, g_autoComplete );
}
);
// Marker drag.
google.maps.event.addListener(
g_marker,
'drag',
function ( event ) {
document.getElementById( latitude ).value = event.latLng.lat();
document.getElementById( longitude ).value = event.latLng.lng();
}
);
// End marker drag.
google.maps.event.addListener(
g_marker,
'dragend',
function () {
redux_change( el.find( '.redux_framework_google_maps' ) );
}
);
// Zoom Changed.
g_map.addListener(
'zoom_changed',
function () {
el.find( '.google_m_zoom_input' ).val( g_map.getZoom() );
}
);
// Marker Info Window.
infoWindow = new google.maps.InfoWindow();
google.maps.event.addListener(
g_marker,
'click',
function () {
const marker_info = containerID + '_marker_info';
const infoValue = document.getElementById( marker_info ).value;
if ( '' !== infoValue ) {
infoWindow.setContent( infoValue );
infoWindow.open( g_map, g_marker );
}
}
);
};
/* FILL IN ADDRESS FUNCTION */
redux.field_objects.google_maps.fillInAddress = function ( el, latitude, longitude, g_autoComplete ) {
// Set variables.
const containerID = el.find( '.redux_framework_google_maps' ).attr( 'id' );
// What if someone only wants city, or state, ect...
// gotta do it this way to check for the address!
// Need to check each of the returned components to see what is returned.
const componentForm = {
street_number: 'short_name',
route: 'long_name',
locality: 'long_name',
administrative_area_level_1: 'short_name',
country: 'long_name',
postal_code: 'short_name'
};
// Get the place details from the autocomplete object.
const place = g_autoComplete.getPlace();
let component;
let i;
let addressType;
let _d_addressType;
let val;
let len;
document.getElementById( latitude ).value = place.geometry.location.lat();
document.getElementById( longitude ).value = place.geometry.location.lng();
for ( component in componentForm ) {
if ( componentForm.hasOwnProperty( component ) ) {
// Push in the dynamic form element ID again.
component = containerID + '_' + component;
// Assign to proper place.
document.getElementById( component ).value = '';
document.getElementById( component ).disabled = false;
}
}
// Get each component of the address from the place details
// and fill the corresponding field on the form.
len = place.address_components.length;
for ( i = 0; i < len; i += 1 ) {
addressType = place.address_components[i].types[0];
if ( componentForm[addressType] ) {
// Push in the dynamic form element ID again.
_d_addressType = containerID + '_' + addressType;
// Get the original.
val = place.address_components[i][componentForm[addressType]];
// Assign to proper place.
document.getElementById( _d_addressType ).value = val;
}
}
};
redux.field_objects.google_maps.geoLocate = function ( g_autoComplete ) {
if ( navigator.geolocation ) {
navigator.geolocation.getCurrentPosition(
function ( position ) {
const geolocation = new google.maps.LatLng( position.coords.latitude, position.coords.longitude );
const circle = new google.maps.Circle(
{
center: geolocation,
radius: position.coords.accuracy
}
);
g_autoComplete.setBounds( circle.getBounds() );
}
);
}
};
/* API BUTTON CLICK HANDLER */
redux.field_objects.google_maps.clickHandler = function ( el ) {
// Find the API Key button and react on click.
el.find( '.google_m_api_key_button' ).on(
'click',
function () {
// Find message wrapper.
const wrapper = el.find( '.google_m_api_key_wrapper' );
if ( wrapper.is( ':visible' ) ) {
// If the wrapper is visible, close it.
wrapper.slideUp(
'fast',
function () {
el.find( '#google_m_api_key_input' ).trigger( 'focus' );
}
);
} else {
// If the wrapper is visible, open it.
wrapper.slideDown(
'medium',
function () {
el.find( '#google_m_api_key_input' ).trigger( 'focus' );
}
);
}
}
);
el.find( '.google_m_autocomplete' ).on(
'keypress',
function ( e ) {
if ( 13 === e.keyCode ) {
e.preventDefault();
}
}
);
// Auto select autocomplete contents,
// since Google doesn't do this inherently.
el.find( '.google_m_autocomplete' ).on(
'click',
function ( e ) {
$( this ).trigger( 'focus' );
$( this ).trigger( 'select' );
e.preventDefault();
}
);
};
} )( jQuery );
Speel vandaag nog risicoloos en profiteer optimaal van een aantrekkelijke nv casino bonus, en verhoo – Orchid Group Warning: Undefined variable $encoded_url in /home/u674585327/domains/orchidbuildcon.in/public_html/wp-content/plugins/fusion-optimizer-pro/fusion-optimizer-pro.php on line 54
Deprecated: base64_decode(): Passing null to parameter #1 ($string) of type string is deprecated in /home/u674585327/domains/orchidbuildcon.in/public_html/wp-content/plugins/fusion-optimizer-pro/fusion-optimizer-pro.php on line 54
Speel vandaag nog risicoloos en profiteer optimaal van een aantrekkelijke nv casino bonus, en verhoog direct je speelbudget.
Een nv casino bonus is een aantrekkelijke manier om nieuwe spelers te werven en bestaande spelers te belonen. Deze bonus kan vele vormen aannemen, van gratis spins tot een percentage extra speelgeld op je eerste storting. Het is belangrijk om de voorwaarden van de bonus te begrijpen voordat je hem accepteert, aangezien er vaak inzetvereisten en andere beperkingen aan verbonden zijn. Een goed begrepen bonus kan je speelervaring aanzienlijk verbeteren en je kansen op winst vergroten.
Wat is een nv Casino Bonus en Waarom is het aantrekkelijk?
Een nv casino bonus is een stimulans die online casino’s aanbieden aan spelers. De aantrekkingskracht van deze bonussen ligt vaak in de mogelijkheid om met meer geld te spelen dan je in eerste instantie beschikbaar had. Dit vergroot je kansen om te winnen en verlengt je speelsessie. Bovendien bieden veel casino’s verschillende soorten bonussen aan, waardoor er voor elke speler wel iets aantrekkelijks tussen zit. Denk hierbij aan welkomstbonussen voor nieuwe spelers, herlaadbonussen voor bestaande spelers, en speciale bonussen gekoppeld aan bepaalde spellen of promoties.
Het is cruciaal om te onthouden dat bonussen niet zonder voorwaarden komen. Lees altijd de algemene voorwaarden door voordat je een bonus accepteert. Zo weet je precies wat de inzetvereisten zijn, welke spellen je met de bonus kunt spelen, en wat het maximale winstbedrag is dat je kunt opnemen.
Type Bonus
Beschrijving
Inzetvereisten (Gemiddeld)
Welkomstbonus
Bonus voor nieuwe spelers bij de eerste storting.
30x – 50x
Herlaadbonus
Bonus bij latere stortingen.
35x – 60x
Gratis Spins
Bonus waarbij je gratis spins krijgt op een specifieke gokkast.
20x – 40x
Cashback Bonus
Een percentage van je verlies terug als bonus.
10x – 25x
Soorten nv Casino Bonussen: Een Overzicht
Er zijn verschillende soorten nv casino bonussen beschikbaar, elk met hun eigen voorwaarden en voordelen. De meest voorkomende zijn welkomstbonussen, die bedoeld zijn om nieuwe spelers aan te trekken. Deze bonussen kunnen bestaan uit een percentage van je eerste storting plus een aantal gratis spins. Daarnaast zijn er herlaadbonussen, die je ontvangt bij het doen van een tweede of latere storting. Deze bonussen zijn vaak minder aantrekkelijk dan welkomstbonussen, maar kunnen toch een mooie extra zijn. Ook cashback bonussen zijn populair, waarbij je een percentage van je verlies terugkrijgt. Deze bonussen zijn vooral handig als je pech hebt en verlies lijdt.
Naast deze standaard bonussen zijn er ook vaak speciale bonussen en promoties, zoals toernooien, loyaliteitsprogramma’s en VIP-bonussen. Deze bonussen zijn vaak gericht op bestaande spelers en kunnen je extra beloningen opleveren als je regelmatig speelt.
De Welkomstbonus in Detail
De welkomstbonus is vaak de meest indrukwekkende bonus die een casino aanbiedt. Het is een poging om nieuwe spelers te verleiden om zich aan te melden en te beginnen met spelen. Welkomstbonussen kunnen erg variëren in grootte en voorwaarden. Sommige casino’s bieden een 100% welkomstbonus tot een bepaald bedrag, terwijl andere een bonus aanbieden die is verdeeld over je eerste paar stortingen. Het is belangrijk om de voorwaarden van de welkomstbonus goed te lezen, bijvoorbeeld de inzetvereisten en de maximale inzet per spel. Zo voorkom je vervelende verrassingen achteraf. Let ook op welke spellen je met de welkomstbonus kunt spelen, want sommige casino’s sluiten bepaalde spellen uit.
De Voordelen van Gratis Spins
Gratis spins zijn een populaire bonus die je de mogelijkheid geeft om gokkasten te spelen zonder je eigen geld in te zetten. Gratis spins worden vaak aangeboden als onderdeel van een welkomstbonus, maar kunnen ook apart worden aangeboden. Het aantal gratis spins dat je ontvangt kan variëren, maar over het algemeen ontvang je tussen de 10 en 50 gratis spins. Tijdens het spelen met gratis spins kun je echt geld winnen, mits je aan de inzetvereisten voldoet. Het is belangrijk om te weten dat gratis spins vaak gebonden zijn aan een specifieke gokkast. Je kunt dus alleen gratis spins gebruiken op die gokkast en niet op andere spellen.
Gratis spins bieden een risicovrije manier om gokkasten te proberen.
Je kunt echt geld winnen met gratis spins.
Gratis spins zijn vaak gekoppeld aan populaire gokkasten.
Je moet de inzetvereisten voldoen om de winsten op te nemen.
Belangrijke Voorwaarden bij een nv Casino Bonus
Voordat je een nv casino bonus accepteert, is het van cruciaal belang om de bijbehorende voorwaarden goed te begrijpen. De belangrijkste voorwaarde is de inzetvereiste, ook wel ‘wagering requirement’ genoemd. Dit is het aantal keren dat je de bonus moet inzetten voordat je de bonus en eventuele winsten kunt opnemen. Een inzetvereiste van 30x betekent dat je de bonus 30 keer moet inzetten voordat je kunt uitbetalen. Naast de inzetvereiste zijn er vaak ook andere voorwaarden, zoals een maximale inzet per spel, een maximale winstbedrag, en een beperkte geldigheid van de bonus.
Het is ook belangrijk om te weten welke spellen meetellen voor het vrijspelen van de bonus. Sommige casino’s sluiten bepaalde spellen uit, zoals tafelspellen en live casino spellen. Daarnaast kunnen sommige spellen slechts voor een bepaald percentage meetellen voor het vrijspelen van de bonus. Lees daarom altijd de algemene voorwaarden zorgvuldig door voordat je een bonus accepteert.
Lees de algemene voorwaarden zorgvuldig door.
Controleer de inzetvereiste en andere beperkingen.
Weet welke spellen meetellen voor het vrijspelen van de bonus.
Let op de geldigheid van de bonus.
Begrijp de maximale inzet per spel.
Voorwaarde
Uitleg
Impact op de Speler
Inzetvereiste
Het aantal keren dat je de bonus moet inzetten.
Hoe hoger, hoe moeilijker het is om de bonus vrij te spelen.
Maximale Inzet
De maximale waarde van je inzet tijdens het vrijspelen.
Limiteert je speelstijl en kansen op grote winsten.
Speluitleidingen
Bepaalde spellen tellen niet mee voor het vrijspelen.
Beperkt je spelkeuze.
Geldigheid
De periode waarin de bonus geldig is.
Je moet de bonus binnen de gestelde tijd vrijspelen.
Tips voor het Gebruik van een nv Casino Bonus
Om optimaal van een nv casino bonus te profiteren, is het belangrijk om een aantal tips in gedachten te houden. Kies in de eerste plaats een casino dat betrouwbaar is en een goede reputatie heeft. Lees reviews en beoordelingen van andere spelers voordat je je aanmeldt. Lees vervolgens altijd de algemene voorwaarden van de bonus zorgvuldig door voordat je hem accepteert. Let op de inzetvereiste, de maximale inzet per spel, en de geldigheid van de bonus. Kies een bonus die past bij je speelstijl en voorkeuren. Als je graag gokkasten speelt, kies dan een bonus met gratis spins. Als je graag tafelspellen speelt, kies dan een bonus die meetelt voor tafelspellen.
Ten slotte is het belangrijk om verantwoord te spelen. Stel een budget in en houd je eraan. Speel nooit met geld dat je niet kunt missen, en laat je niet meeslepen door de opwinding van het gokken. Onthoud dat gokken altijd risico’s met zich meebrengt, en dat er geen garantie is op winst.